#include<stdio.h>  
#include<malloc.h>  
#define MaxSize 50  
typedef char ElemType;  
char w;  
typedef struct  
{  
    ElemType data[MaxSize];  
    int top;  
}SqStack;  
void InitStack(SqStack* &s)  
{  
    s=(SqStack*)malloc(sizeof(SqStack));  
    s->top=-1;  
}  
bool StackEmpty(SqStack*s)  
{  
    return(s->top==-1);  
}  
bool Push(SqStack* &s,ElemType e)  
{  
    if(s->top==MaxSize-1)  
        return false;  
    if(s->top==-1)  
        return false;  
    s->top++;  
    s->data[s->top]=e;  
    return true;  
}  
bool Pop(SqStack* &s,ElemType &e)  
{  
    if(s->top==-1)  
        return false;  
    e=s->data[s->top];  
    s->top--;  
    return true;  
}  
void DestroyStack(SqStack* &s)  
{  
    free(s);  
}  
int main()  
{  
    SqStack *s;  
    printf("顺序栈的各种基本运算的算法: \n");  
   
    printf("(1)初始化栈s  \n");  
    InitStack(s);  
    printf("(2)判断栈s是否非空: %s\n",(StackEmpty(s)?"空":"非空"));  
   
    printf("(3)依次进栈元素a、b、c、d、e \n");  
    Push(s,'a');Push(s,'b');Push(s,'c');Push(s,'d');Push(s,'e');  
   
    printf("(4)判断栈s是否非空: %s\n",(StackEmpty(s)?"空":"非空"));  
   
    printf("(5)输出出栈序列:  ");while(!StackEmpty(s))Pop(s,w); printf("%c",w); printf("\n"); printf("(6)判断栈s是否非空: %s\n",(StackEmpty(s)?"空":"非空"));DestroyStack(s); return 0; } 